home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <egb.h>
- #include <guidbg.h>
-
- #include <block.h>
-
- int windowID = -1 ;
- int quitIconID = -1 ;
- int upIconID = -1 ;
- int downIconID = -1 ;
-
- extern void userIdleTask(void);
- extern EGB_BLOCK block ;
- extern EGB_BLOCK2 block2 ;
-
- //#define DEBUG
-
- #define MINZOOM (2)
- #define MAXZOOM (150)
-
- int quitFuncRet = ILLEGAL_FUNCTION ;
-
- unsigned int zoom ; //倍率
- unsigned int xs,ys; //読み込むサイズ-1(倍率変更・ウィンドウをリサイズしたとき、に変わる)
- unsigned int dx,dy; // d* = x*>>1 ;
- unsigned int color_mode=999;
- unsigned int pixel[] = {4,8,16,24} ;
- HYPER whyp ; //ウィンドゥのハイパー
- FRAME pf ; //表示位置(ウィンドウを移動したりリサイズしたときに変わる)
- char *buffer=NULL ; //バッファ
-
- void setSize(void)
- {
- xs = ((pf.rdwx-pf.lupx+1)/zoom)-1;
- ys = ((pf.rdwy-pf.lupy+1)/zoom)-1;
- #ifdef DEBUG
- printf("size=(%d,%d)\n",xs,ys);
- #endif
- dx = (xs>>1);
- dy = (ys>>1);
- block2.dx = (xs+1) ;
- block2.dy = (ys+1) ;
- //画面モードをチェック
- SCREEN scrn;
- MMI_GetScreen( &scrn );
- if(scrn.mode!=color_mode)
- { //色数が変更されている
- color_mode = scrn.mode ;
- if(buffer!=NULL) TL_free( buffer );
- int length ;
- if ( color_mode == 0 )
- length = (xs+8)/8*4*(ys+1); //16色モード専用処理
- else
- length = (xs+8)*pixel[color_mode]/8*(ys+1);
- #ifdef DEBUG
- printf("pixel= %d\n",pixel[color_mode]);
- printf("buffer= %d bytes(%d,%d)\n",length,xs,ys);
- #endif
- buffer = TL_malloc( length );
- if(buffer == NULL)
- { //メモリ確保失敗
- #ifdef DEBUG
- printf("TL_malloc failed\n");
- #endif
- MMI_SendMessage(quitIconID,MM_EXEC,2,0,0);
- } else
- {
- block.pixel = (char *)buffer ;
- block2.pixel = (char *)buffer ;
- }
- }
-
- return ;
- }
-
- void setIcon(void)
- {
- FRAME fr;
-
- //quitIconの設定
- fr.lupx = whyp.fr.lupx+3;
- fr.lupy = whyp.fr.rdwy-17;
- fr.rdwx = fr.lupx+14;
- fr.rdwy = fr.lupy+14;
- MMI_SendMessage(quitIconID,MM_MOVE,1,&fr);
- //upIconの設定
- fr.lupx = whyp.fr.rdwx-47;
- fr.rdwx = fr.lupx+14;
- MMI_SendMessage(upIconID,MM_MOVE,1,&fr);
- //downIconの設定
- fr.lupx = whyp.fr.rdwx-32;
- fr.rdwx = fr.lupx+14;
- MMI_SendMessage(downIconID,MM_MOVE,1,&fr);
-
- return ;
- }
-
- void setUser(void)
- {
- FRAME size;
- //ユーザー領域の設定
- pf.lupx = 3;
- pf.lupy = 3;
- pf.rdwx = (whyp.fr.rdwx-whyp.fr.lupx-5)/zoom;
- pf.rdwy = (whyp.fr.rdwy-whyp.fr.lupy-20)/zoom;
- pf.rdwx = 2+pf.rdwx*zoom;
- pf.rdwy = 2+pf.rdwy*zoom;
- #ifdef DEBUG
- printf("user=(%d,%d)-(%d,%d)\n",pf.lupx,pf.lupy,pf.rdwx,pf.rdwy);
- #endif
- size.lupx = 66;
- size.lupy = 35;
- size.rdwx = 1023;
- size.rdwy = 511;
- MMI_SendMessage(windowID,MM_SETUSER,2,&pf,&size);
- //表示位置の設定
- pf.lupx += whyp.fr.lupx;
- pf.lupy += whyp.fr.lupy;
- pf.rdwx += whyp.fr.lupx;
- pf.rdwy += whyp.fr.lupy;
- #ifdef DEBUG
- printf("put=(%d,%d)-(%d,%d)\n",pf.lupx,pf.lupy,pf.rdwx,pf.rdwy);
- #endif
- block2.x1 = pf.lupx;
- block2.y1 = pf.lupy;
- block2.x2 = pf.rdwx;
- block2.y2 = pf.rdwy;
-
- return ;
- }
-
- /* initDataGUI:windowID:MJ_WINDOWL40の呼び出し関数 */
- int windowFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- if(messId==MM_SHOW)
- {
- #ifdef DEBUG
- printf("window:MM_SHOW\n");
- #endif
- setSize();
-
- }
- else
- if(messId==MM_MOVE || messId==MM_UPDATE)
- {
- #ifdef DEBUG
- printf("window:MM_MOVE||MM_UPDATE\n");
- #endif
- MMI_SendMessage(kobj,MM_GETHYPER,1,&whyp);
- color_mode=999;
- setUser();
- setIcon();
- setSize();
- } else return (-1) ;
-
- return NOERR ;
- }
-
- /* initDataGUI:quitIconID:MJ_ICONL40の呼び出し関数 */
- int quitFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- //メモリ開放
- if(buffer!=NULL) TL_free( buffer );
- //終了
- MMI_SetHaltFlag( TRUE );
- quitFuncRet = NOERR;
- return NOERR ;
- }
-
- /* initDataGUI:upIconID:MJ_ICONL40の呼び出し関数 */
- /* initDataGUI:downIconID:MJ_ICONL40の呼び出し関数 */
- int upDownFunc(kobj, messId, argc, pev, trigger)
- int kobj ;
- int messId ;
- int argc ;
- EVENT *pev ;
- int trigger ;
- {
- int i;
-
- i=zoom;
- if(kobj==upIconID)
- { if(zoom<MAXZOOM) zoom++; }
- else
- if(zoom>MINZOOM) zoom--;
-
- if(i==zoom) return NOERR ;
-
- color_mode = 999;
- setUser();
- setSize();
- userIdleTask();
-
- #ifdef DEBUG
- printf("zoom=%d\n",zoom);
- #endif
-
- return NOERR ;
- }
-